<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
    String path = request.getContextPath();
			String basePath = request.getScheme() + "://"
					+ request.getServerName() + ":" + request.getServerPort()
					+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>AFC设备维修系统-权限管理</title>
		<style>
.ruleAreaDiv {
	border: 1px solid #FFFFFF;
	border-radius: 5px 5px 5px 5px;
	box-shadow: 1px 1px 0 #999999;
}

.ruleAreaUI {
	background: none repeat scroll 0 0 #FFFFFF;
	border-top: 1px solid #FFFFFF;
	min-height: 50px;
}
</style>
	</head>

	<body>
		<jsp:include page="/jsp/common/top.jsp"></jsp:include>
		<!-- 顶部start -->
		<div id="main">
			<div class="body">
				<!-- 导航菜单 -->
				<jsp:include page="/jsp/common/nav.jsp"></jsp:include>
				<!-- 主体 -->
				<div class="main_body">
					<table class="condition"
						style="width: 100%; font-size: 14px; font-weight: bold; color: #000000;"
						align="center">
						<tr>
							<td>
								<input type="button" class="btn-title" value="新增同级节点" onclick="addTreeNode();" />
									&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
								<input type="button" class="btn-title" value="新增子节点" onclick="addChildTreeNode();" />
							</td>
						</tr>
					</table>
					<div id="add_div">
						<table class="table_add" style="width: 100%;font-family: '微软雅黑'" >
							<tr>
								<td style="width: 40%;" >
									<!-- 左侧div -->
									<div id="datalist" class="" >
										<ul id="purviewTree" class="ztree ruleAreaUI"></ul>
									</div>
								</td>
								<td style="width: 1%;border-left: 1px solid; border-left-color: #0078B6;" rowspan="2">
									&nbsp;
								</td>
								<td  height="150px;">
									<!-- 左侧div -->
									<table class="table_add" style="width: 100%;font-family: '微软雅黑';"  >
									<label  style="color:#fe7c0a;font-size: 18px;text-decoration: underline"> 权限详情</label>
										<tr>
											<th style="width: 15%; ">
												权限编号：
											</th>
											<td >
												<label id="laCode"> ${purview.privCode}</label>
											</td>
										</tr>
										<tr>
											<th style="width: 15%; ">
												权限名称：
											</th>
											<td >
												<label id="laName"> ${purview.actionName}</label>
											</td>
										</tr>
										<tr>
											<th style="width:15%; ">
												权限动作：
											</th>
											<td >
												<label id="laAction">${purview.actionUrl}</label>
											</td>
										</tr>
										<tr>
											<th style="width:15%; ">
												所属节点：
											</th>
											<td >
												<label id="laParent">
													——
												</label> 
											</td>
										</tr>
										<tr>
											<th style="width:15%; ">
												权限类型：
											</th>
											<td >
												<label id="laNodeType">
												<s:if test="%{purview.nodeType==0}">
													菜单类型
												</s:if>
												<s:else>
													按钮类型
												</s:else>
												</label> 
											</td>
										</tr>
										
										<tr>
											<th style="width:15%;vertical-align: text-top;">
												权限描述：
											</th>
											<td style="word-break:break-all">
												<label id="laMark">${purview.mark}</label>
											</td>
										</tr>
									</table>
								</td>
							</tr>
						</table>
					</div>
					
					
					<!-- 新增弹出框 -->
					<div id="purviewAddDialog"  style="display: none;">
						<form id="frmAdd" action="" method="post" >
							<table class="table_add" style="width: 100%;font-family: '微软雅黑'" >
								<tr>
									<th style="width: 15%; height: 38px;">
										权限编号：
									</th>
									<td >
										<input id="parent" type="hidden"  name="purview.parentId" /> <!-- 父节点 -->
										<input id="code" type="text" class="text"  name="purview.privCode" /> <!-- 节点编号 -->
										<input id="pid" type="hidden" name="purview.id" /> <!-- id -->
										<input id="showcode" type="text" class="text"  name="purview.privCode" readonly="readonly" onkeydown="if(event.keyCode==8)return false;"/>
										<input id="optionType" type="hidden"  /><font color="red"  >&nbsp;&nbsp;*</font>
									</td>
								</tr>
								<tr>
									<th style="width: 15%; height: 38px;">
										权限名称：
									</th>
									<td >
										<input id="purviewName" type="text" class="text"  name="purview.actionName" />
										<font color="red"  >&nbsp;&nbsp;*</font>
									</td>
								</tr>
								<tr>
									<th style="width:15%; height: 38px;">
										权限动作：
									</th>
									<td >
										<input type="text" id="actionurl" class="text"  name="purview.actionUrl"/>
										<font color="red"  >&nbsp;&nbsp;*</font>
									</td>
								</tr>
								<tr>
									<th style="width:15%; height: 38px;">
										权限类型：
									</th>
									<td >
										<select name="purview.nodeType" id="nodetype">
											<option value="0" selected="selected">菜单类型 </option>
											<option value="1">按钮类型 </option>
										</select><font color="red"  >&nbsp;&nbsp;*</font>
									</td>
								</tr>
								<tr>
									<th style="width:15%;height: 60px;">
										权限描述：
									</th>
									<td style="vertical-align: text-top;" >
										<textarea cols="4" name="purview.mark"  id="mark"  rows="5"
											style="width:380px; font-family: '微软雅黑'; font-size: 12px; font-weight: bold; color: #666666; height: 55px"></textarea>
									</td>
								</tr>
							</table>
						</form>
					</div>
				</div>
			</div>
		</div>

		<!-- 顶部end -->
		<jsp:include page="/jsp/common/bottom.jsp"></jsp:include>
		<div id="tempDiv"></div>
		<script type="text/javascript">
	var setting = {
		view: {
				selectedMulti: false
			},
		edit: {
			enable: true,
			showRemoveBtn: true, 
			showRenameBtn: true,
			removeTitle: "删除",
			renameTitle: "编辑"
		},
		data: {
			keep: {
				leaf:true				
			},
			simpleData: {
				enable: true
			}
		},
		callback: {
			beforeDrop: beforeDrop2,
			onClick: zTreeOnClick,
			onNodeCreated: zTreeOnNodeCreated,
			beforeEditName: zTreeBeforeEditName,
			beforeRemove:zTreeBeforeRemove
		}
	};
	
	
	var rightGrp =${flag};
	
	//删除之前事件
	function zTreeBeforeRemove(treeId, treeNode) {
		if(null != treeNode && treeNode.name=='newNode1')
		{
			return true;
		}else{
			if(treeNode.isParent){
				alert("当前是父节点，暂不能直接删除！");
				return false;
			}else{
				if(confirm('确定删除该条记录?')){
					//获取删除节点信息
					var url = encodeURI(encodeURI('deletePurview.action?purview.id=' + treeNode.id));
					jQuery.ajax( {
						url : url,
						type : "POST",
						dataType: "json",
						cache : false,
					   error : function(XMLHttpRequest, textStatus, errorThrown)  {   
					    	alert('删除权限失败！');
					    },
						success : function(message) {
							if(message){
								alert('权限删除成功！');
								var treeObj = $.fn.zTree.getZTreeObj(treeId);
								treeObj.removeNode(treeNode);
							}else if(message=="error"){
								window.location.href="goError.action";
							}else{
								alert('权限正在使用，暂不能删除！');
							}
						}
					});
				}else{
					return false;
				}
			}
		}
		return false;
	}

	
	// 节点拖拽事件
	function beforeDrop2(treeId, treeNodes, targetNode, moveType) {
		//if(confirm("确定修改权限？")){
			//return true;
		//}
		//else{
		//	return false;
		//}
		return false;
	}
	
	//修改名称之前触发事件
	function zTreeBeforeEditName(treeId, treeNode, newName) {
		// is new
		if(null != treeNode.getParentNode())
		{
			var pName =treeNode.getParentNode().name;
			if(null ==pName || pName == 'newNode1')
			{
				alert('请先完成父节点编辑后再进行字节点编辑！');
				return false;
			}
		}
		if(null != treeNode && treeNode.name=='newNode1')
		{
			$('#showcode').val('');
			$('#showcode').hide();
			$('#code').show();
			
			var node = treeNode.getParentNode();
			if(null == node || node =='')
			{	
				
				$('#parent').val('-1');
			}
			else
			{
			
				var url = encodeURI(encodeURI('purviewDetail.action?purview.id=' + node.id));
				jQuery.ajax( {
				url : url,
				type : "POST",
				dataType: "json",
				cache : false,
				success : function(message) {
					var items = eval(message);
					if(null != items){
						if(null !=items[0].msg && items[0].msg =='error'){
							window.location.href="goError.action";
						}else{
							if(null !=items[0].purview){
								$('#parent').val(node.id);
								
							}else{
								alert('当前父节点不存在，请刷新后重试！');
								jQuery( "#purviewAddDialog" ).dialog( "close" );
							}
						}
					}else{
						alert('当前父节点不存在，请刷新后重试！');
						jQuery( "#purviewAddDialog" ).dialog( "close" );
					}
				}
			});
			}	
				//清空
			$('#purviewName').val('');
			$('#showcode').val('');
			$('#actionurl').val('');
			$('#nodetype').val('');
			$('#mark').val('');
			$('#code').val('');
			
			//设置属性为0提交表单新增
			$('#optionType').val('0');	
			//绑定blur 事件
			$('#code').unbind("blur",codeClick);
			$('#code').bind("blur",codeClick);	
		}else{
			$('#code').unbind("blur",codeClick);
			//获取当前节点详细信息
			var url = encodeURI(encodeURI('purviewDetail.action?purview.id=' + treeNode.id));
			jQuery.ajax( {
				url : url,
				type : "POST",
				dataType: "json",
				cache : false,
				success : function(message) {
					var items = eval(message);
					if(null != items){
						if(null !=items[0].msg && items[0].msg =='error'){
							window.location.href="goError.action";
						}else if(null !=items[0].purview){
							
							//页面参数赋值
							$('#showcode').show();
							$('#code').val('');
							$('#code').hide();
							$('#purviewName').val(items[0].purview.actionName);
							$('#showcode').val(items[0].purview.privCode);
							$('#actionurl').val(items[0].purview.actionUrl);
							$('#parent').val(items[0].purview.parentId);
							$('#nodetype').val(items[0].purview.nodeType);
							$('#mark').val(items[0].purview.mark);
							$('#pid').val(items[0].purview.id);
							//设置属性为1 提交表单修改
							$('#optionType').val('1');
						}else{
							alert('该数据不存在，请刷新后重试！');
							jQuery( "#purviewAddDialog" ).dialog( "close" );
						}
					}else{
						alert('该数据不存在，请刷新后重试！');
						jQuery( "#purviewAddDialog" ).dialog( "close" );
					}
				}
			});
		 }
		 jQuery("#purviewAddDialog").dialog("option","node",treeNode);
		 jQuery("#purviewAddDialog").dialog("option","flag",'edit');
		 jQuery( "#purviewAddDialog" ).dialog( "open" );
	}
	
	//创建节点事件
	function zTreeOnNodeCreated(event, treeId, treeNode) {
	 //  jQuery("#purviewAddDialog").dialog("option","node",treeNode);
	 //  jQuery("#purviewAddDialog").dialog("option","flag",'add');
	 //  jQuery("#purviewAddDialog" ).dialog( "open" );
	};
	
	//点击节点事件
	function zTreeOnClick(event, treeId, treeNode) {
		if(null != treeNode && treeNode.name=='newNode1')
		{
		}else{
			//获取当前节点详细信息
			var url = encodeURI(encodeURI('purviewDetail.action?purview.id=' + treeNode.id));
			jQuery.ajax( {
				url : url,
				type : "POST",
				dataType: "json",
				cache : false,
				success : function(message) {
					var items = eval(message);
					if(null !=items[0].msg && items[0].msg =='error'){
						window.location.href="goError.action";
					}else{
						if(null != items){
							if(null !=items[0].purview){
								//页面参数赋值
								$('#laName').html(items[0].purview.actionName);
								$('#laCode').html(items[0].purview.privCode);
								if(null ==items[0].purview.actionUrl || items[0].purview.actionUrl=='')
								{
									$('#laAction').html('——');
								}
								else
								{
									$('#laAction').html(items[0].purview.actionUrl);
								}
								if(null ==items[0].purview.parentName || items[0].purview.parentName=='')
								{
									$('#laParent').html('——');
								}
								else
								{
									$('#laParent').html(items[0].purview.parentName);
								}
								
								if(items[0].purview.nodeType=='0')
								{
									$('#nodetype').val('菜单类型');
								}
								else
								{
									$('#laNodeType').html('按钮类型');
								}
								
								if(null ==items[0].purview.mark || items[0].purview.mark=='')
								{
									$('#laMark').html('——');
								}
								else
								{
									$('#laMark').html(items[0].purview.mark);
								}
							}else{
								alert('该数据不存在，请刷新后重试！');
							}
						}else{
							alert('该数据不存在，请刷新后重试！');
						}
					}
				}
			});
		}
	};
	
	//按钮新增同级节点
	function addTreeNode() {
		var treeObj = jQuery.fn.zTree.getZTreeObj("purviewTree");
		var newNodes = [{name:"newNode1"}];
		var nodes = treeObj.getSelectedNodes();
		if(nodes.length>0)
		{
			//清空
			$('#purviewName').val('');
			$('#showcode').val('');
			$('#actionurl').val('');
			$('#nodetype').val('');
			$('#mark').val('');
			
			//设置属性为0提交表单新增
			$('#optionType').val('0');
			$('#pid').val('');
			//页面参数赋值
			$('#showcode').hide();
			$('#code').show();
			if(null !=nodes[0].getParentNode()){
				//父节点赋值
				$('#parent').val(nodes[0].getParentNode().id);
			}		
			newNodes = treeObj.addNodes(nodes[0].getParentNode(), newNodes);
		}
		else
		{
			alert('请选择要操作的权限组!');
		}
	}
	
	//新增子节点
	function addChildTreeNode(){
		var treeObj = jQuery.fn.zTree.getZTreeObj("purviewTree");
		var newNodes = [{name:"newNode1"}];
		var nodes = treeObj.getSelectedNodes();
		
		if(nodes.length>0)
		{	
			//清空
			$('#purviewName').val('');
			$('#showcode').val('');
			$('#actionurl').val('');
			$('#nodetype').val('');
			$('#mark').val('');
			
			//设置属性为0提交表单新增
			$('#optionType').val('0');
			//页面参数赋值
			$('#showcode').hide();
			$('#parent').val(nodes[0])
			$('#code').show();
			nodes[0].isParent=true;
			//父节点赋值
			$('#parent').val(nodes[0].id);	
			
			newNodes = treeObj.addNodes(nodes[0], newNodes);
		}
		else
		{
			alert('请选择要操作的权限组!');
		}
	}
	
	jQuery(document).ready(function(){
		//添加高亮显示
		//selectNav('nav3');
		
		var ruleTree = jQuery.fn.zTree.init(jQuery("#purviewTree"), setting, rightGrp);
		
		jQuery( "#purviewAddDialog" ).dialog({
			autoOpen: false,
			height: 350,
			width: 500,
			modal: true,
			modal: true,
			buttons: {
				"保存": function(){
					//表单验证成功 提交表单 
					if(checkFrmAdd())
					{
						var url='';
						//根据类型获取提交表单类型
						if($('#optionType').val()=='1'){
							url="doPurviewEdit.action";
						}else{
							url="doAddPurview.action";
						}
						//转换+号
						var code =$('#actionurl').val();
						code= code.replace(/\+/g, "%2B"); 
						$('#actionurl').val(code);
						
						//新增表单					
						 $('#frmAdd').ajaxSubmit( {  
							target : '#tempDiv' ,    
						    url : url, 
						    type:"POST",
							contentType:"application/x-www-form-urlencoded;charset=UTF-8",
						    error : function(XMLHttpRequest, textStatus, errorThrown) { 
						   		 $('#tempDiv').html(''); 
						    	alert('权限编辑失败！');
						    	var flag = jQuery( "#purviewAddDialog" ).dialog("option","flag");
						    	ruleTree.removeNode(jQuery( "#purviewAddDialog"  ).dialog("option","node"));
								jQuery( "#purviewAddDialog" ).dialog( "close" );
						    },
						    success: function(data){
						    	$('#tempDiv').html('');
						    	if(data!=0){
						    		//成功更新名称
							    	var myEditNode = jQuery( "#purviewAddDialog" ).dialog("option","node");
									myEditNode.name = jQuery("#purviewName").val();
									if(null==myEditNode.id || myEditNode.id=='')
									{
										myEditNode.id=data;
									}
									ruleTree.updateNode(myEditNode);
									jQuery( "#purviewAddDialog" ).dialog( "close" );
									alert('权限编辑成功！');
						    	}else if(data=="error"){
									window.location.href="goError.action";
								}else{
						    		alert('权限编辑失败！！！');
						    		var flag = jQuery( "#purviewAddDialog" ).dialog("option","flag");
									ruleTree.removeNode(jQuery( "#purviewAddDialog" ).dialog("option","node"));
									jQuery( "#purviewAddDialog" ).dialog( "close" );
						    	}
						    } 
						 });   
					}
				},
				"取消": function() {
						/**取消按钮事件*/
					if(confirm('您确认取消本次操作？')){
						var flag = jQuery( this ).dialog("option","flag");
						if(flag == 'add')
						{
							ruleTree.removeNode(jQuery( this ).dialog("option","node"));
						}
				
						jQuery( this ).dialog( "close" );
					}
				}
			}
		});
		
		
		//权限名称是否存在验证
		$('#purviewName').blur(function(){
			var item = $.trim($(this).val());
			if (null != item && item != '') 
			{
				var myReg = /^[^@\/\'\\\"#$%&\^\*<>+]+$/;
				//特殊字符校验
				if (!myReg.test(item)) {
					alert("权限名称不能含有$、#、%、/、*、<、>、'、\"、\\、&、+等特殊字符，请重新输入！");
					$('#purviewName').focus();
					return false;
				}
				else
				{
					//获取当前ztree 对象 
					var treeObj = $.fn.zTree.getZTreeObj("purviewTree");
					//当前树选中的节点
					var nodes = treeObj.getSelectedNodes();
					
					//满足条件为修改
					if(null != nodes && nodes[0].name!='newNode1')
					{
						//原始数据
						var orgNameTemp = nodes[0].name;
						var trim =$.trim(orgNameTemp);
						//如果当前值和原始值不同 则启动验证
						if(item != $.trim(orgNameTemp))
						{
							//新增 直接验证喽
							var url = encodeURI(encodeURI('isExistUsePurName.action?purview.actionName=' + item));
							$.ajax( {
								url : url,
								type : "POST",
								cache : false,
								success : function(message) {
									if (message == "true") 
									{
										alert("权限名称已存在，请重新输入！");
										$('#purviewName').focus();
										return false;
									}else if(message=="error"){
										window.location.href="goError.action";
									}
								}
							});
						}
					}
					else
					{
						//新增 直接验证喽
						var url = encodeURI(encodeURI('isExistUsePurName.action?purview.actionName=' + item));
						$.ajax( {
							url : url,
							type : "POST",
							cache : false,
							success : function(message) {
								if (message == "true") 
								{
									alert("权限名称已存在，请重新输入！");
									$('#purviewName').focus();
									return false;
								}else if(message=="error"){
									window.location.href="goError.action";
								}
							}
						});
					}
				}
			}
		});
	});
	
	//验证角色编号是否存在
	function codeClick(){
		var item = $.trim($(this).val());
		if (null != item && item != '') 
		{
			var codeReg_01 = /^[0-9a-zA-Z_]{1,}$/;
			//特殊字符校验
			if (!codeReg_01.test(item)) 
			{
				alert("权限编号仅可包含字母、数字、下划线，请重新输入！");
				$('#code').focus();
				return false;
			}
			else
			{
				var url = encodeURI(encodeURI('isExistUsePurCode.action?purview.privCode=' + item));
				$.ajax( {
					url : url,
					type : "POST",
					cache : false,
					success : function(message) {
						if (message == "true") 
						{
							alert("权限编号已存在，请重新输入！");
							$('#code').focus();
							return false;
						}else if(message=="error"){
							window.location.href="goError.action";
						}
					}
				});
			}
		}
	}
	//表单验证
	function checkFrmAdd()
	{
		//正则表达式
		var myReg = /^[^@\/\'\\\"#$%&\^\*<>+]+$/;
		var codeReg = /^[0-9a-zA-Z_]{1,}$/;
		
		if(	$('#optionType').val()!='1'){
			//权限编号验证
			if(!paramIsNull('code'))
			{	
				alert('权限编号不能为空！');
				$('#code').focus();
				return false;
			}
			else
			{
				var  code =$('#code').val();
				if(getLen(code)>30)
				{
					alert("权限编号字符个数不能大于30！");
					$('#code').focus();
					return false;
				}
				//特殊字符校验
				if (!codeReg.test(code)) 
				{
					alert("权限编号仅可包含字母、数字、下划线，请重新输入！");
					$('#code').focus();
					return false;
				}
				
				var url = encodeURI(encodeURI('isExistUsePurCode.action?purview.privCode=' + code));
				$.ajax( {
					url : url,
					type : "POST",
					cache : false,
					success : function(message) {
						if (message == "true") 
						{
							alert("权限编号已存在，请重新输入！");
							$(this).focus();
							return false;
						}else if(message=="error"){
							window.location.href="goError.action";
						}
					}
				});
			}
		}
		
		//权限名验证  name
		if(!paramIsNull('purviewName'))
		{	
			alert('权限名称不能为空！');
			$('#purviewName').focus();
			return false;
		}
		else
		{
			var code =$('#purviewName').val();
			if(getLen(code) >30)
			{
				alert("权限名称字符个数不能大于30,中文按3个字符计算！");
				$('#purviewName').focus();
				return false;
			}
			//特殊字符校验
			if (!myReg.test(code)) {
				alert("权限名称不能含有$、#、%、/、*、<、>、'、\"、\\、&、+等特殊字符，请重新输入！");
				$('#purviewName').focus();
				return false;
			}
		}
		
		
		var code =$('#actionurl').val();
		if(!paramIsNull('actionurl'))
		{	
			alert("权限动作不能为空！");
			$('#actionurl').focus();
			return false;
		}
		else
		{
			if(getLen(code)>100)
			{
				alert("权限动作符个数不能大于100,中文按3个字符计算！");
				$('#actionurl').focus();
				return false;
			}
		}
		//描述
		if(paramIsNull('mark'))
		{	
			var code =$('#mark').val();
			if(getLen(code)>200)
			{
				alert("权限描述字符个数不能大于200,中文按3个字符计算！");
				$('#mark').focus();
				return false;
			}
			
			//特殊字符校验
			if (!myReg.test(code)) {
				alert("权限描述不能含有$、#、%、/、*、<、>、'、\"、\\、&、+等特殊字符，请重新输入！");
				$('#mark').focus();
				return false;
			}
		}
		return true;
	}
	
	//参数非空验证
	function paramIsNull(paramId){
		var temp = $('#'+paramId).val();
		if(null == temp || temp=='')
		{
			$('#'+paramId).val('');
			return false;
		}
		else{
			//文本框去左右空格重新赋值
			$('#'+paramId).val($.trim(temp));
			return true;
		}
	} 
	
	/**计算字符串长度  中文三个字符计算**/
	function getLen(str){
	   var len=0;
	   if(null!=str&&str!=""){
	   for(var i=0;i<str.length;i++){
	   var intCode=str.charCodeAt(i);
	   //如果ASCII码等于34(")38(&)39(')47(/)60(<)62(>)92(\)也算三个字符
	   if (intCode>=0&&intCode<=127&&intCode!=34&&intCode!=39&&intCode!=47&&intCode!=60&&intCode!=62&&intCode!=92){
	        len=len+1;
	      }else{
	         len=len+3;
	            }
	       }
	    }
	   return len;
	}
		
</script>
	</body>
</html>
